package com.briup.corejava.day05;

import java.util.Arrays;

/**
 * java.util.Arrays工具类的使用
 * 1、将数组以字符串的形式输出
 * 2、排序
 * 3、填充
 * 4、复制、范围复制
 */
public class Test2 {
    public static void main(String[] args) {
        String[] strs = {"C","Java","Python","C++","C#"};
        // 字符串输出
        System.out.println(Arrays.toString(strs));

        // 排序，默认为升序
        Arrays.sort(strs);
        System.out.println(Arrays.toString(strs));

        // 二分查找（主要是查找元素在数组中的位置）
        int index = Arrays.binarySearch(strs, "AAA");
        System.out.println(index);

        // 调用一下自己写的二分查找
        int[] array = {1, 3, 4, 5, 7, 9, 10};
        System.out.println(binarySearch(array,4));

        // 数组复制（元数组，新数组长度）
        String[] stringsNew = Arrays.copyOf(strs, strs.length*2);
        System.out.println(Arrays.toString(stringsNew));
        // 数组复制，截取子数组
        String[] stringsSub = Arrays.copyOfRange(strs, 2, 4);
        System.out.println(Arrays.toString(stringsSub));

        // 数组填充
        int[] arr = new int[3]; // [0,0,0]
        Arrays.fill(arr,2); // [2,2,2]
        System.out.println(Arrays.toString(arr));

        // 使用系统的数组拷贝方法来复制数组
        // {"C","Java","Python","C++","C#"}
        // 先排序（已经通过sort完成），再截取
        // ｜｜
        // {null,null,"C","C#","C++",null};
        String[] str1 = new String[6];
        // 重点注意五个参数的含义
        System.arraycopy(strs,0,str1,2,3);
        System.out.println(Arrays.toString(str1));
    }
    public static int binarySearch(int[] arr,int value) {
        int start = 0;
        int end = arr.length - 1;
        int mid;
        while(true) {
            mid = (start+end) / 2;
            if(value == arr[mid])
                return mid;
            else if(value > arr[mid]) {
                start = mid + 1;
            }else {
                end = mid - 1;
            }
            //当start > end 循环结束
            if(start > end)
                break;
        }
        return -1;
    }
}
